在前面幾篇分享的文章中,討論了使用萬用字元:*、%、_、[]、[^] 的方法與時機,這次要討論,萬一所要查詢的資料本身就有這幾個萬用字元時,應該如何處置。
為了方便解說,假設在資料表 TabTest 中,有下列的資料:
如果你需要測試的話,可以直接用下面的程式碼建立資料表並新增相關的資料:
USE tempdb
GO
CREATE TABLE TabTest(
[地址] nvarchar(50) NOT NULL,
[折扣] varchar(5) NOT NULL,
[附註] nvarchar(50) NOT NULL)
GO
SET NOCOUNT ON
INSERT INTO TabTest VALUES('台北市忠孝東路一段10-1號', '30%', '* 此地址為辦公處所')
INSERT INTO TabTest VALUES('台中市東區逢甲大道110號3樓3-1室', '10%' ,'* 按一下 [匯入網際網路郵件及地址]')
INSERT INTO TabTest VALUES('台北市皇后大道123-1號', '12%', '再按一下 [下一步]')
INSERT INTO TabTest VALUES('高雄市美術館東路25號', '15%', '按一下 [匯入及匯出')
INSERT INTO TabTest VALUES('台南市南區港乾路712號2-1樓', '20%', '按一下 [下一步]')
INSERT INTO TabTest VALUES('花蓮市海連路12號', '30%', '按一下 [完成]')
假設要找出 TabTest 資料表中,「折扣」欄位的資料值為 30% 的資料,由於資料有百分比符號 (%) ,要將百分比符號當作一個查詢的字元,而非一個萬用字元來搜尋時,就要使用 ESCAPE 關鍵字並指定適當的「逸出字元」:
SELECT * FROM TabTest
WHERE 折扣 LIKE '%30!%%' ESCAPE '!'
執行結果:
上面程式碼中的 ESCAPE 子句,所指定的字元是 !(驚嘆號),表示說,在 LIKE 子句內的 ! 之後的那個字元(也就是 %)將被視為是一個常數的字元資料,而不是萬用字元。這樣說,大家可能還不是挺清楚的,所以再舉幾個例子來加以說明。
例如,要搜尋「地址」欄位的任何位置,只要含有 - (減號)的任何記錄,可以使用下面的程式碼:
SELECT * FROM TabTest
WHERE 地址 LIKE '%#-%' ESCAPE '#'
執行結果:
例如,要搜尋「附註」欄位的任何位置,只要含有 * (星號)的任何記錄,可以使用下面的程式碼:
SELECT * FROM TabTest
WHERE 附註 LIKE '@*%' ESCAPE '@'
執行結果:
透過下圖,相信大家可以更佳瞭解上面那個程式碼 ESCAPE 子句中的字元與 LIKE 子句中的字元之關係:
請問一下您的範例中有加入幾個特殊字元如#、@、! 請問各有什麼義意與使用時機及用途
因為三個SQL 都當成逸出字元
謝謝!!
<pre class="c" name="code">SELECT * FROM TabTest
WHERE 地址 LIKE '%#-%' ESCAPE '#'
<pre class="c" name="code">SELECT * FROM TabTest
WHERE 附註 LIKE '@*%' ESCAPE '@'
<pre class="c" name="code">SELECT * FROM TabTest
WHERE 折扣 LIKE '%30!%%' ESCAPE '!'
使用時機在文章內已有說明:
在前面幾篇分享的文章中,討論了使用萬用字元:*、%、_、[]、[^] 的方法與時機,這次要討論,萬一所要查詢的資料本身就有這幾個萬用字元時,應該如何處置。
如果看過前面幾篇關於萬用字元的分享文章,再輔以這次最後一張圖的說明,應該就清楚使用的時機了。
沒有人規定一定只能用這幾個特殊字元:#、@、!,你當然可以用其他的字元